package com.yumi.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.ILoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TimeSpanAspet {
    private static final Logger log = LoggerFactory.getLogger(TimeSpanAspet.class);

    /**
     * 环绕增强
     */
    public Object around(ProceedingJoinPoint jp) {
        log.info("[TimeSpanAspet 环绕增强] 记录{}方法执行的开始时间" + jp.getSignature().getName());
        //进入方法之前就开始了
        long startTime = System.currentTimeMillis();

        try {
            // 执行原方法并获取返回值
            Object result = jp.proceed();
            log.info("[环绕增强-后置] 获取{}方法执行的结果：{}" + jp.getSignature().getName(), result);
            return result; // 必须返回原方法的返回值
        } catch (Throwable e) {
            log.info("[环绕增强-异常抛出] 获取{}方法执行的耗时：{}" + jp.getSignature().getName(), e.getMessage());
            // 注意：不能隐瞒异常
            return e;
        }finally {
            //退出方法之后就结束了
            long endTime = System.currentTimeMillis();
            log.info("[TimeSpanAspet 环绕增强] 获取{}方法执行的耗时：{}" + jp.getSignature().getName(), endTime - startTime);
        }
    }
}
